package jm.nj.demo16main.classLoader;

import org.junit.Test;

import sun.security.ec.SunEC;

/*
* 类加载器ClassLoader:把class文件加载到内存中,并为之生成一个class文件对象
* 类加载器的组成
*           Bootstrap ClassLoader 引导(根)类加载器
*                   也被称为引导加载器,负责java核心类的加载
*           Extendsion ClassLoder 扩展类加载
*                   负责JRE的扩展目录中jar包的加载
*                   在JDK的JRE的lib目录ext目录下
*           System ClassLoder  应有类加载器
*                   负责在JVM启动时加载来自java命令class文件,以及classpath环境变量
*                   所指定的jar包和类路径
*                    自定义类型person; commons_io-2.4.jar
*   system  ClassLoder extends Extension Classloder extends BootLoder ClassLoder extends ClassLoder
*
* Class类中的方法
		ClassLoader getClassLoader() 返回该类的类加载器。
	ClassLoader中的方法:
		ClassLoader getParent() 返回委托的父类加载器。
* */
public class DemoClassLoader {
    @Test
    public void demo01(){
        //获取本类的类加载器-->DemoClassLoader由System加载
        ClassLoader cl1 = DemoClassLoader.class.getClassLoader();
        //sun.misc.Launcher$AppClassLoader@18b4aac2
        System.out.println(cl1);

        ClassLoader cl2 = cl1.getParent();
            //sun.misc.Launcher$ExtClassLoader@8efb846
        System.out.println(cl2);


        ClassLoader cl3 = cl2.getParent();
        //null
        //Bootstrap是由c/c++编写,没有固定的类描述,索引返回null
        System.out.println(cl3);


    }

    @Test
    public void app(){
        ClassLoader cl1 = DemoClassLoader.class.getClassLoader();
        System.out.println(cl1);
    }

    @Test
    public void ext(){
        ClassLoader cl1= SunEC.class.getClassLoader();
        System.out.println(cl1);
    }

    @Test
    public void root(){
        ClassLoader cl1 = String.class.getClassLoader();
        System.out.println(cl1);
    }
}
